package com.jdwx.opengl.kotlin

/**
 * 控制流
 */
fun main(){

    var a = 10
    var b = 20
// 传统用法
//    var max = a
//    if (a < b) max = b
//
//    println( "max:$max" );
//
//// With else
//    var max: Int
//    if (a > b) {
//        max = a
//    } else {
//        max = b
//    }
//
//// 作为表达式
    //val max = if (a > b) a else b


//    val max = if (a > b) {
//        print("Choose a")
//        a
//    } else {
//        print("Choose b")
//        b
//    }
//
//    println("max:"+max);

//    var x = 3;
//    when (x) {
//        1 -> println("x == 1")
//        2 -> {
//            println("x == 2")
//            println("x == 2")
//        }
//        3,4->{
//            println("x == 3")
//            println("or")
//            println("x == 4")
//        }
//        else -> { // 注意这个块
//            println("x is neither 1 nor 2")
//        }
//    }

    /*
    fun hasPrefix(x: Any) = when(x) {
        is String -> x.startsWith("prefix")
        else -> false
    }

    var bb = hasPrefix( "prefixxiaobai" );
    bb = hasPrefix( 100 );

    if( bb ){
        println( "true" );
    }else{
        println( "false" );
    }

    var collection = intArrayOf(10,12,133,112);
    var arr:IntArray = intArrayOf(1,2,3,4,56,2) ;
    for (item in collection) println(item)


    for (item: Int in collection) {
        println(item)
    }

    for (i in 1..3) {
        println(i)
    }

    for (i in 6 downTo 0 step 2) {
        println(i)
    }


    for (i in collection.indices) {
        println(collection[i])
    }

    var collection1 = intArrayOf(120,12,133,112);
    println(collection1[0])

    for ((index, value) in collection1.withIndex()) {
        println("the element at $index is $value")
    }

     */

//    loop@ for (i in 1..100) {
//        println( "i=$i" )
//    }
    var list = listOf(1,2,3,4,5,6);

    list.forEach lit@{
        if (it == 3) return@lit // 局部返回到该 lambda 表达式的调用者，即 forEach 循环
        println(it)
    }


//    list.forEach {
//        if (it == 3) return // 非局部直接返回到 foo() 的调用者
//        println(it)
//    }

    var list2 = listOf(1,2,3,4,5,6);
    list2.forEach (
        fun(x:Int){
            println( x );
        }
    )


    fun foo() {
        run loop@{
            listOf(1, 2, 3, 4, 5).forEach {
                if (it == 3) return@loop // 从传入 run 的 lambda 表达式非局部返回
                print(it)
            }
        }
        println(" done with nested loop")
    }

    foo()
    listOf(1, 2, 3, 4, 5).forEach(fun(value: Int) {
        if (value == 0) return
        println(value)
    })


}